<?php

namespace app\common\model;

use think\Model;
use think\model\concern\SoftDelete;

class Admin extends Model
{
    //软删除
    use SoftDelete;

    //只读字段
    protected $readonly = ['email'];

    //登录校验
    public function login($data)
    {
        //创建验证器
        $validate = new \app\common\validate\Admin();
        //当数据没有通过验证
        if (!$validate->scene('login')->check($data)){
            return $validate->getError();
        }
        //先清空验证码再从数据库里查询字段
        unset($data['verify']);

        $result = $this->where($data)->find();
        if ($result){
            //判断用户是否可用
            if ($result['admin_status'] != 1){
                return '该账户不可用，请联系超级管理员！';
            }
            //1表示有用户且用户名和密码正确
            //登录成功后存session
            $sessionData = [
                'admin_id' => $result['id'],
                'admin_nickname' => $result['admin_nickname'],
                'admin_is_super' => $result['admin_is_super']
            ];
            session('admin',$sessionData);
            return 1;
        }else{
            return '用户名或密码错误！';
        }
    }

    //注册
    public function register($data)
    {
        //创建验证器
        $validate = new \app\common\validate\Admin();
        //当数据没有通过验证
        if (!$validate->scene('register')->check($data)){
            return $validate->getError();
        }
        //只允许插入数据库中有的字段，把结果赋值给result
        $result = $this->allowField(true)->save($data);
        if ($result){
            return 1;
        }else{
            return '注册失败！';
        }
    }

    //重置密码
    public function reset($data)
    {
        //创建验证器
        $validate = new \app\common\validate\Admin();
        //当数据没有通过验证
        if (!$validate->scene('reset')->check($data)){
            return $validate->getError();
        }
        //验证验证码是否正确
        if ($data['code'] != session('code')){
            return '验证码不正确';
        }
        //查询当前管理员的Email
        $adminInfo = $this->where('admin_email',$data['admin_email'])->find();
        //随机生成密码
        $password = mt_rand(10000,99999);
        //管理员密码为生成的随机密码
        $adminInfo->password = $password;
        //将更新的结果赋值给$result
        $result = $adminInfo->save();
        if ($result){
            $content = '恭喜您，密码重置成功！<br>用户名：'.$adminInfo['admin_username'].'<br>新密码：'.$password;
            mailto($data['admin_email'],'密码重置成功',$content);
            return 1;
        }else{
            return '重置密码失败';
        }
    }

    //管理员添加
    public function add($data)
    {
        //创建验证器
        $validate = new \app\common\validate\Admin();
        //当数据没有通过验证
        if (!$validate->scene('add')->check($data)){
            return $validate->getError();
        }
        //读取数据库中字段赋值给result
        $result = $this->allowField(true)->save($data);
        if ($result){
            //若添加成功
            return 1;
        }else{
            return '管理员添加失败';
        }
    }

    //管理员编辑
    public function edit($data)
    {
        //创建验证器
        $validate = new \app\common\validate\Admin();
        //当数据没有通过验证
        if (!$validate->scene('edit')->check($data)){
            return $validate->getError();
        }
        //查询管理员id
        $adminInfo = $this->find($data['admin_id']);
        //若原密码不等于查询到的密码
        if ($data['oldpass'] != $adminInfo['admin_password']){
            return '原密码不正确';
        }
        //将新密码赋值给password
        $adminInfo->password = $data['newpass'];
        $adminInfo->nickname = $data['admin_nickname'];
        //修改结果赋值给result
        $result = $adminInfo->save();

        if ($result){
            //修改成功返回1
            return 1;
        }else{
            return '修改失败';
        }
    }
}
